有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java进程通过REST端点从Spark应用程序中接收请求

我有一个场景,需要在20节点集群上处理Spark作业中用户的输入请求。Spark应用程序使用深度学习,并对存储在HDFS上的用户数据进行一些预测。其想法是提供一个类似REST Web服务的环境,用户可以向该环境发送请求,并应使用Spark在Thread上以分布式模式处理这些请求。以下是问题:

  • 当我构建带有依赖项的jar文件时,它的大小更大 超过1gb。深度CNN模型不嵌入jar文件中
  • 通过spark-submit为每个输入请求运行应用程序似乎不切实际,因为:
    1. spark-submit有自己的开销。资源分配、jvm应用程序容器分配等都需要时间
    2. 该应用程序在启动时加载经过CNN深度训练的模型,一个模型的大小约为700mb,加载也需要时间

我的想法是使用spark-submit作为无限运行的作业提交一次应用程序,将spark上下文和模型保留在内存中,并公开一个REST端点,用户可以向其发送请求。收到请求后,从正在运行的作业中触发映射操作,获取结果,并以Json格式将其返回给用户。这样一来,它们将立即得到处理,不会有任何延迟。这可能吗

我研究了很多文章,也研究了一些问题,比如Using Spark to process requestsBest Practice to launch Spark Applications via Web Application?run spark as java web applicationhow to deploy war file in spark-submit command (spark)Creating a standalone on-demand Apache Spark web service,但是,这些都不符合我描述的场景

从文章和stackoverflow问题中,我了解到Spark REST APIApache Livy可以用来提交Spark作业,然而,在这两种情况下,每一个请求都会提交一个Spark作业,这与我前面描述的问题相同(1+gb jar文件大小加上starup上的加载模型)。另外,在多个并发输入请求中会发生什么?我说得对吗

我读到Uber使用Spark进行路由计算(articlearticlearticle),但它的源代码是封闭的,我不知道他们如何在每次输入用户请求时动态地进行计算

简而言之,是否可以使用轻量级框架(如Spark Java)在Spark作业中嵌入REST微服务?Spark streaming在这种情况下也不适用,因为没有流数据源

我已经寻找了很长时间,但我从未找到一个切实可行的解决方案。如果我对Spark REST Api和Livy的理解有误,请纠正我的错误?如果我的想法是错误的,你能告诉我还有什么其他方法可以完成这项工作吗?我们将非常感谢您的任何帮助或建议


共 (0) 个答案